import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

// 引入自定义组件
import clickOut from "@/utils/clickOut"

// 引入截取电话号码
import * as filters from './filters'

// 引入公共方法
import * as common from './utils/common'

// 引入过度动画
import Transitions from 'vue2-transitions'

// 将字符串转成拼音，就可以通过字符串截取取出拼音首字母，这样就可以进行首字母排序。
import pinyin from 'js-pinyin'

// 用于监听点击事件并滚动到元素
import scrollTo from 'vue-scrollto'

// 引入自己封装的mixin
import mixin from '@/mixins'

// 引入Vue Content Loading是一个内容SVG加载卡组件
import { VueContentLoading } from 'vue-content-loading';

// 引入vueBUS 用于组件间的传值
import bus from './utils/eventBus';

// 引入封装的storage
import {
  storage
} from "@/assets/js/storage"

// 引入与app原生交互方法
import {
  callhandler,
  routerJump,
  registerhandler
} from './assets/js/bridge'

// 引入vant组件
import Vant from 'vant'
import 'vant/lib/index.css'
import { Lazyload } from 'vant'

// 引入复制
import VueClipboard from 'vue-clipboard2'

// 要引入polyfill
import '@babel/polyfill';

// 引入es6-promise
import Es6Promise from 'es6-promise'
Es6Promise.polyfill()

// 样式
import "normalize.css/normalize.css";
import './assets/scss/normalize.scss'
import './assets/scss/reset.scss'
import './assets/scss/border.css'

// rem 布局
import 'lib-flexible'

// 调试工具
import Vconsole from 'vconsole'
if (process.env.VUE_APP_MODE !== 'production') {
  const vConsole = new Vconsole()
  Vue.use(vConsole)
}

// 挂在全局的方法
Vue.prototype.$common = common;
Vue.prototype.$bus = bus;
Vue.prototype.$storage = storage;
Vue.prototype.$pinyin = pinyin;
Vue.prototype.$callhandler = callhandler
Vue.prototype.$routerJump = routerJump
Vue.prototype.$registerhandler = registerhandler

// 定义一个新组件，全局注册
Vue.component("ContentLoading",VueContentLoading);

// 使用过度动画
Vue.use(Transitions)

// 使用scrollTo
Vue.use(scrollTo)

// 使用第三方组件
Vue.use(Vant).use(Lazyload).use(VueClipboard)

// 创建 Vue 实例之前全局定义过滤器
Object.keys(filters).forEach(key => {
  Vue.filter(key, filters[key])
})

// 全局自定义指令的创建，我们需要使用 Vue.directive接口
Vue.directive("clickOut", clickOut);

// Vue.mixin(mixin);

Vue.config.productionTip = false

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
